<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>1变量提升和函数提升</title>
</head>

<body>
    <!-- 
        1. 变量声明提升
            通过var定义（声明）的变量，在定义语句（赋值语句）之前就可以进行访问
            值：undefined
        2. 函数声明提升
            通过Function声明的函数，在定义之前就可以直接调用
            值：函数定义（对象）
     -->
    <script>
        //  例子
        var a = 3
        function Fn() {
            // 存在变量提升问题，实际的代码执行顺序是这样的
            // var a
            // console.log(a)
            // a = 4

            console.log(a)
            var a = 4
        }
        Fn()
        // 函数提升，没有问题
        Fn2()
        function Fn2() {
            console.log('Fn2()')
        }
        // 无法执行，此处不是函数提升，而是变量提升
        fn3()
        var fn3 = function () {
            console.log('fn()')
        }
    </script>
</body>

</html>